package com.cskaoyan.charstream.transfer.outs;

import java.io.*;

/*

        public void write(int c)
            1.写入单个字符。
            2.要写入的字符包含在给定整数值的 16 个低位中，16 高位被忽略。

        public void write(char[] cbuf)
          将整个字符数组中的字符写入到流中。

        public void write(char[] cbuf,int off,int len)
           将字符数组中的部分字符(从off开始的len个字符)字符写入到流中。

        public void write(String str)
         写入字符串。

        public void write(String str,int off,int len)
        写入字符串的某一部分( 从off个位置的len个字符)。


       所有的字符流，自带(小)缓冲区，是在编解码的时候来使用的
      1. 所以，当我们向字符流写入少量数据的时候，数据有可能存在于自带的缓冲区中，还没有写入底层流
      2. 为了保证，即使是少量字符数据，也能及时将少量字符数据写入，底层字节流。
        a. close() 关闭此流，但要先刷新它
        b. flush() 刷新该流的缓冲

 */
public class Demo2Write {

    public static void main(String[] args) throws IOException {
        // 测试5个write方法
        //writeExample();

        Writer writer = new OutputStreamWriter(new FileOutputStream("b.txt"));

        writer.write("你好");

        // 关闭流释放资源
        //writer.flush();

    }

    private static void writeExample() throws IOException {
        String data = "你好";

        // 1. 创建字符输出流对象
        Writer writer = new OutputStreamWriter(new FileOutputStream("c.txt"));

        // 5. 利用write方法想目标文件写入，字符数据

        // public void write(int c) 第一种方式
        //for (int i = 0; i < data.length(); i++) {
        //char c = data.charAt(i);
        // public void write(int c)
        //writer.write(c);
        //}

        // public void write(char[] cbuf) 第二种方式
        //char[] chars = data.toCharArray();
        //writer.write(chars);


        //public void write(char[] cbuf,int off,int len) 第三种方式
        //char[] chars = data.toCharArray();
        //writer.write(chars, 0, 1);

        //public void write(String str)
        //writer.write(data);

        // public void write(String str,int off,int len)
        writer.write(data, 0, 1);

        // 关闭流
        writer.close();
    }
}
